﻿/* Global Settings
 ============================================================ */
(function(root) {
    'use strict';

    if (navigator.userAgent.match(/IEMobile\/10\.0/)) {
        var msViewportStyle = document.createElement('style');
        msViewportStyle.appendChild(
            document.createTextNode(
                '@-ms-viewport{width:auto!important}'
            )
        );
        document.querySelector('head').appendChild(msViewportStyle);
    }
    /* ------------------------------------------------------------ */
	var $app = root.$app = {};
	root.$app = $app;
	$app.version = '1.1.0'
	$app.basePath = '/';
	$app.theme = ""; /*前端配置为："";后端配置为："themes/mobile/"或者"themes/default/"*/
	$app.frontJs = $app.theme + "js/";
	$app.scriptDir = $app.basePath + $app.frontJs;
	$app.skinDir = $app.basePath + 'themes/';
	$app.common_module = '';
	$app.controller = '';
	$app.arguments = {};
	$app.dateTime = new Date();
	$app.retUrl = '';
	$app.scriptDirConversion = (function () {
		var _tempDir = '../..';/*前端配置为："../..";后端配置为：""*/
		return _tempDir+ $app.scriptDir;
	})();
    $app.entrance = (function() {
        return $app.scriptDirConversion + 'access.js';
    })();

    // Create XMLHttpRequest Object
    $app.createXHR = function() {
        if (typeof XMLHttpRequest != "undefined") {
            return new XMLHttpRequest();
        } else if (typeof ActiveXObject != "undefined") {
            if (typeof arguments.callee.activeXString != "string") {
                var versions = ["MSXML2.XMLHttp.6.0", "MSXML2.XMLHttp.3.0", "MSXML2.XMLHttp"];
                for (var i = 0, len = versions.length; i < len; i++) {
                    try {
                        new ActiveXObject(versions[i]);
                        arguments.callee.activeXString = versions[i];
                        break;
                    } catch (ex) {
                    }
                }
            }
            return new ActiveXObject(arguments.callee.activeXString);
        } else {
            throw new Error("No XHR object available.");
        }
    };

    // Detect Mobile Browsers
    $app.isMobileAccess = (function(a,b){if(/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino/i.test(a)||/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i.test(a.substr(0,4))){return true;}else{return false;}})(navigator.userAgent||navigator.vendor||window.opera,'');

    root.$app = $app;
})(window);

/* Global Seajs Settings
 ============================================================ */
(function(root, _seajs) {
    if ('undefined' != typeof _seajs) {
        _seajs.config({
            base: $app.scriptDirConversion,
            paths: {
                'feapply': '{CONTROLLERS}'
            },
            alias: {
                'es5-shim': '{LIB}/es5-shim.min',
                'json': '{LIB}/json3',
                'jquery': '{LIB}/jquery.min',
                'lodash': '{LIB}/lodash.min',
                'lhave': '{LIB}/lhave',
                'swiper2': '{LIB_PLUGINS}/idangerous.swiper',
                'jquery.ganged': '{LIB_JQUERY_PLUGINS}/jquery.ganged',
                'data': '{LIB}/city-picker.data',
                'picker': '{LIB}/city-picker',
                'citycode': '{LIB}/citycode',
                'layer.date': '{LIB_JQUERY_PLUGINS}/laydate/laydate',
                'jquery.icheck': '{LIB_JQUERY_PLUGINS}/jquery.icheck',
                'layer.dialog': '{LIB_JQUERY_PLUGINS}/layer/layer',
                'nicescroll': '{LIB_JQUERY_PLUGINS}/jquery.nicescroll',
				'jquery.pin': '{LIB_JQUERY_PLUGINS}/jquery.pin',
				'jquery.pagination': '{LIB_JQUERY_PLUGINS}/jquery.pagination',
                'jquery.validform': '{LIB_JQUERY_PLUGINS}/jquery_validform',
				'jquery.superslide': '{LIB_JQUERY_PLUGINS}/jquery.superslide',
                'jquery.kindeditor': '{LIB_JQUERY_PLUGINS}/kindeditor/kindeditor-all-min',
                'jquery.plupload': '{LIB_JQUERY_PLUGINS}/plupload/plupload.full.min',
                'jquery.select2': '{LIB_JQUERY_PLUGINS}/jquery.select2',
                'sp_validForm': '{CONTROLLERS}/sp_validForm',
                'jplayer': '{LIB_JQUERY_PLUGINS}/jplayer/jquery.jplayer',
                'jplayer.playlist': '{LIB_JQUERY_PLUGINS}/jplayer/jplayer.playlist',
            },
            vars: {
                'LIB': 'library',
                'LIB_JQUERY_PLUGINS': 'library/jquery_plugins',
                'LIB_PLUGINS': 'library/plugins',
                'CONTROLLERS': 'controllers'
            },
            preload: [
                Function.prototype.bind ? '' : 'es5-shim',
                root.JSON ? '' : 'json',
                root.jQuery ? '' : 'jquery',
                root._ ? '' : 'lodash',
                'lhave'
            ],
            map: [
                [/^(.*\.(?:css|js))(.*)$/i, '$1?t=' + (+new Date())]
            ],
            debug: false,
            charset: function(url) {
                return 'utf-8';
            }
        });
    }
})(window, ('undefined' != typeof seajs ? seajs : undefined));
/* ============================================================ */
(function(window) {
    'use strict';

    var VERSION = '1.0';
    var ORIGINAL = window.Class;
    var Class = window.Class = function(obj) {
        obj = obj || {};
        var constructor = function() {
            return (this.initialize) ? this.initialize.apply(this, arguments) : self;
        };
        if (obj.implement) {
            var self = window === this ? copy(constructor.prototype) : this;
            var imp = obj.implement;
            remove(obj, 'implement');
            obj = extend(obj, implement(imp));
        }
        constructor.prototype = copy(obj);
        constructor.constructor = constructor;
        constructor._parent = copy(obj);
        for (var i = 0, values = ['extend', 'implement', 'getOptions', 'setOptions']; i < values.length; i++) {
            constructor[values[i]] = Class[values[i]];
        }
        return constructor;
    };
    Class.extend = function(obj) {
        var self = this;
        if (obj.implement) {
            this.prototype = extend(this.prototype, implement(obj.implement));
            remove(obj, 'implement');
        }
        for (var key in obj) {
            obj[key] = typeof obj[key] === 'function' && /parent/.test(obj[key].toString()) ? (function(method, name) {
                return function() {
                    this.parent = self._parent[name];
                    return method.apply(this, arguments);
                };
            })(obj[key], key) : obj[key]
        }
        this._parent = extend(this._parent, obj, true);
        this.prototype = extend(this.prototype, obj);
        return this;
    };
    Class.implement = function(array) {
        return this.prototype = extend(this.prototype, implement(array));
    };
    Class.getOptions = function() {
        return this.prototype.options || {};
    };
    Class.setOptions = function(options) {
        return this.prototype.options = extend(this.prototype.options, options);
    };
    Class.noConflict = function() {
        window.Class = ORIGINAL;
        return Class;
    };
    Class.version = VERSION;

    function copy(obj) {
        var F = function() {};
        F.prototype = obj.prototype || obj;
        return new F();
    }

    function remove(obj, name, safe) {
        if (safe) {
            var safeObj = {};
            for (var key in obj) {
                if (key !== name) safeObj[key] = obj[key];
            }
        } else {
            delete obj[name];
        }
        return safeObj || obj;
    }

    function extend(oldObj, newObj, preserve) {
        if (!oldObj || !newObj) return oldObj || newObj || {};
        oldObj = copy(oldObj);
        newObj = copy(newObj);
        for (var key in newObj) {
            if (Object.prototype.toString.call(newObj[key]) === '[object Object]') {
                extend(oldObj[key], newObj[key]);
            } else {
                oldObj[key] = (preserve && oldObj[key]) ? oldObj[key] : newObj[key];
            }
        }
        return oldObj;
    }

    function implement(array) {
        var collection = {};
        for (var i = 0; i < array.length; i++) {
            if (typeof(array[i]) === 'function') array[i] = array[i].prototype;
            var safe = remove(array[i], 'initialize', true);
            if (safe.implement) {
                collection = implement(safe.implement);
            } else {
                collection = extend(collection, safe);
            }
        }
        return collection;
    }
})(window);
